package com.sixth.system.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sixth.core.annotation.OperaLog;
import com.sixth.core.entity.DictData;
import com.sixth.core.vo.R;
import com.sixth.system.service.DictDataService;
import com.sixth.system.vo.DictDataVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 字典数据管理控制器
 *
 * @author Stu YH
 * @date Created in 2024/8/14 16:24
 * @description 提供字典数据管理相关的API接口
 */
@Api(tags = "字典数据管理")
@RestController
@RequestMapping("/system/dict/data")
public class DictDataController {

    @Autowired
    private DictDataService dictDataService;

    /**
     * 根据字典类型查询字典数据信息
     * @param type 字典类型
     * @return 字典数据集合信息
     */
    @ApiOperation(value = "根据字典类型查询字典数据", notes = "根据提供的字典类型查询对应的字典数据信息")
    @GetMapping("type/{type}")
    public R<List<DictData>> listByType(@PathVariable String type) {
        return dictDataService.selectByType(type);
    }

    /**
     * 分页查询字典数据列表
     * @param dictDataVo 查询条件
     * @return 分页查询结果
     */
    @ApiOperation(value = "分页查询字典数据列表", notes = "根据查询条件分页查询字典数据列表")
    @PostMapping("/listByPage")
    public R<Page<DictData>> listByPage(@RequestBody DictDataVo dictDataVo) {
        return dictDataService.selectByPage(dictDataVo);
    }

    /**
     * 根据dict_type字段查询对应字典数据的集合  分页
     * @param dictDataVo 查询条件
     * @return 分页查询结果
     */
    @ApiOperation(value = "根据dict_type查询字典数据", notes = "根据dict_type字段分页查询对应的字典数据")
    @PostMapping("/listByDataType")
    public R<Page<DictData>> listByDataType(@RequestBody DictDataVo dictDataVo) {
        return dictDataService.listByDataType(dictDataVo);
    }

    /**
     * 根据字典类型ID查询字典的dictType
     * @param dictId 字典类型ID
     * @return 字典类型
     */
    @ApiOperation(value = "根据字典类型ID查询字典类型", notes = "根据字典类型ID查询对应的字典类型")
    @GetMapping("/getDictTypeById/{dictId}")
    public R<String> getDictTypeById(@PathVariable Long dictId) {
        return dictDataService.getDictTypeById(dictId);
    }

    /**
     * 根据dict_id查询字典数据
     * @param dictId 字典ID
     * @return 字典数据
     */
    @ApiOperation(value = "根据dict_id查询字典数据", notes = "根据dict_id查询对应的字典数据")
    @GetMapping("/getByDictId/{dictId}")
    public R<DictData> getByDictId(@PathVariable Long dictId) {
        return dictDataService.getByDictId(dictId);
    }

    /**
     * 添加或更新字典数据
     * @param dictData 字典数据信息
     * @return 操作结果
     */
    @ApiOperation(value = "添加或更新字典数据", notes = "添加或更新字典数据信息")
    @OperaLog(value = "添加或更新字典数据", type = 2)
    @PostMapping("/addUpdate")
    public boolean addUpdate(@RequestBody DictData dictData) {
        return dictDataService.addUpdate(dictData);
    }

    /**
     * 批量删除字典数据
     * @param dictIds 需要删除的数据ID数组
     * @return 删除结果
     */
    @ApiOperation(value = "批量删除字典数据", notes = "根据ID数组批量删除字典数据")
    @OperaLog(value = "删除字典数据", type = 3)
    @GetMapping("/batchDelete/{dictIds}")
    public R batchDelete(@PathVariable Long[] dictIds) {
        return dictDataService.batchDelete(dictIds);
    }
}
